<!DOCTYPE html>
<html prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#
" lang="zh_cn">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>挑战1小时python编码提取核酸报告数据 | vitamind3 竹里馆</title>
<link href="../../assets/css/all-nocdn.css" rel="stylesheet" type="text/css">
<link href="../../assets/css/ipython.min.css" rel="stylesheet" type="text/css">
<link href="../../assets/css/nikola_ipython.css" rel="stylesheet" type="text/css">
<meta name="theme-color" content="#5670d4">
<meta name="generator" content="Nikola (getnikola.com)">
<link rel="alternate" type="application/rss+xml" title="RSS" hreflang="zh_cn" href="../../rss.xml">
<link rel="canonical" href="https://vitamind3.gitee.io/posts/tiao-zhan-1xiao-shi-pythonbian-ma-ti-qu-he-suan-bao-gao-shu-ju/">
<!--[if lt IE 9]><script src="../../assets/js/html5.js"></script><![endif]--><meta name="author" content="vitamind3">
<link rel="prev" href="../tui-jian-qi-yong-cte-xing-nullable-reference-types/" title="推荐启用C#特性Nullable reference types" type="text/html">
<link rel="next" href="../shi-yong-c-interactivejiao-hu-shi-yun-xing-cdai-ma-shi-li/" title="使用C# Interactive交互式运行C#代码示例" type="text/html">
<meta property="og:site_name" content="vitamind3 竹里馆">
<meta property="og:title" content="挑战1小时python编码提取核酸报告数据">
<meta property="og:url" content="https://vitamind3.gitee.io/posts/tiao-zhan-1xiao-shi-pythonbian-ma-ti-qu-he-suan-bao-gao-shu-ju/">
<meta property="og:description" content="最近因上海疫情原因封闭在家，周末虽然是休息，但也不能出门，知乎刷到一个问题：复旦博士开发小程序，2 分钟核对 800 幅核酸截图助力防控，疫情中你在哪个瞬间体会到了知识的力量？ - 知乎 。没弄过OCR类的项目，感觉应该不难，手痒就决定挑战下1小时python编码提取核酸报告数据。
知乎原问题截图：



先上结论
先上结果：1小时内没弄出来😓。情况是这样的：

弄这个脚本一共花了约2小时：昨天晚">
<meta property="og:type" content="article">
<meta property="article:published_time" content="2022-04-10T23:41:41+08:00">
</head>
<body>
<a href="#content" class="sr-only sr-only-focusable">跳到主内容</a>

<!-- Menubar -->

<nav class="navbar navbar-expand-md static-top mb-4
navbar-dark
bg-dark
"><div class="container">
<!-- This keeps the margins nice -->
        <a class="navbar-brand" href="../../">

            <span id="blog-title">vitamind3 竹里馆</span>
        </a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#bs-navbar" aria-controls="bs-navbar" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="bs-navbar">
            <ul class="navbar-nav mr-auto">
<li class="nav-item">
<a href="../../pages/introduction" class="nav-link">欢迎</a>
                </li>
<li class="nav-item">
<a href="../../archive.html" class="nav-link">文章归档</a>
                </li>
<li class="nav-item">
<a href="../../categories/" class="nav-link">分类</a>
                </li>
<li class="nav-item">
<a href="../../rss.xml" class="nav-link">RSS 源</a>

                
            </li>
</ul>
<ul class="navbar-nav navbar-right"></ul>
</div>
<!-- /.navbar-collapse -->
    </div>
<!-- /.container -->
</nav><!-- End of Menubar --><div class="container" id="content" role="main">
    <div class="body-content">
        <!--Body content-->
        
        
        
<article class="post-text h-entry hentry postpage" itemscope="itemscope" itemtype="http://schema.org/Article"><header><h1 class="p-name entry-title" itemprop="headline name"><a href="." class="u-url">挑战1小时python编码提取核酸报告数据</a></h1>

        <div class="metadata">
            <p class="byline author vcard p-author h-card"><span class="byline-name fn p-name" itemprop="author">
                    vitamind3
            </span></p>
            <p class="dateline">
            <a href="." rel="bookmark">
            <time class="published dt-published" datetime="2022-04-10T23:41:41+08:00" itemprop="datePublished" title="2022-04-10 23:41">2022-04-10 23:41</time></a>
            </p>
            

        </div>
        

    </header><div class="e-content entry-content" itemprop="articleBody text">
    <div>
<p>最近因上海疫情原因封闭在家，周末虽然是休息，但也不能出门，知乎刷到一个问题：<a href="https://www.zhihu.com/question/526743020/answer/2430321458">复旦博士开发小程序，2 分钟核对 800 幅核酸截图助力防控，疫情中你在哪个瞬间体会到了知识的力量？ - 知乎</a> 。没弄过OCR类的项目，感觉应该不难，手痒就决定挑战下1小时python编码提取核酸报告数据。</p>
<p>知乎原问题截图：</p>
<!-- TEASER_END -->

<p><img alt="知乎原问题截图" src="../../images/image-20220410161036613.png"></p>
<h3>先上结论</h3>
<p>先上结果：1小时内没弄出来😓。情况是这样的：</p>
<ul>
<li>弄这个脚本一共花了约2小时：昨天晚上花了约1个半小时，今天花了约半小时。</li>
<li>脚本本身没啥难度。最终成果：1个脚本，46行（含空行）。</li>
<li>编写脚本前后加起来差不多半小时的时间。余下的时间都在等安装easyocr包，等下载检测模型😂。</li>
<li>模型一直下载不下来，查看easyocr源码，发现是因为神秘力量屏蔽掉了数据源，于是沐浴更衣焚香净手，很快就下载了2个模型文件。</li>
<li>当然等的时间也没浪费，刷了会知乎，出门做了个核酸，煮了碗泡面。</li>
<li>完整的脚本上传到了码云：<a href="https://gitee.com/vitamind3/vitamind3-scan-ocr">vitamind3-scan-ocr</a>
</li>
<li>有时候一个问题理论上看起来挺简单，但实际上执行时总会遇到各种各样的琐碎问题，这些琐碎问题才是最花时间的。例如这次挑战遇到的问题是笔记本上的python环境没装pytorch这些库导致安装时间过长，下载检测模型时遇到了不可描述的问题。</li>
</ul>
<h3>视频</h3>
<p>前面1个半小时的过程录屏记录了下，有兴趣的可去看：</p>
<iframe width="668px" height="400px" src="//player.bilibili.com/player.html?aid=510601027&amp;bvid=BV1Ju411v71n&amp;cid=572999187&amp;page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>

<h3>关于知乎问题“博士开发小程序助力抗疫”</h3>
<p>关于知乎上原问题，我想说的挺多。</p>
<p>我也不认识新闻里报道的李博士，从新闻来看，我认为他做得挺好。首先他在这个时刻当了志愿者来服务老百姓。其次，他在志愿活动中用自己的能力解决了具体的问题，提高了大家的效率。这两件事都是好事。</p>
<p>这个新闻也暴露出一些更高层面上的问题，例如核酸结果为什么还需要人工抄写核对。这些从技术上应该有更好的解决办法。</p>
<p>有评论说这个脚本可简单了，博士不过如此。这个让我想起一个老段子：</p>
<pre class="code literal-block"><span></span><code>你考了98分，学霸考了100分。不要觉得你就离学霸很近了，你考了98分是实力只有这么多，学霸考100分是因为试卷只有100分。
</code></pre>

<h3>脚本设计、结果</h3>
<p>功能：</p>
<ol>
<li>读取  pictures 目录下全部图片。</li>
<li>识别每张图片中的信息： '文件名', '姓名', '采样时间', '检测结果'。</li>
<li>输出到csv文件中。</li>
</ol>
<p>技术选型：</p>
<ul>
<li>OCR使用 EasyOCR 。花2分钟搜索了一下，发现这个排名比较前，用法也比较简单。</li>
<li>为了格式简单，这里没有写入 xlsx ，而是采用了csv 。</li>
</ul>
<p>测试数据：</p>
<ul>
<li>自己的核酸结果截图1张，做了些保护隐私的操作。数据太少，就是玩，无所谓了。</li>
</ul>
<p>结果：</p>
<ul>
<li>能生成 csv 文件，输出的数据正确。</li>
</ul>
</div>
    </div>
    <aside class="postpromonav"><nav><ul class="pager hidden-print">
<li class="previous">
                <a href="../tui-jian-qi-yong-cte-xing-nullable-reference-types/" rel="prev" title="推荐启用C#特性Nullable reference types">上一篇文章</a>
            </li>
            <li class="next">
                <a href="../shi-yong-c-interactivejiao-hu-shi-yun-xing-cdai-ma-shi-li/" rel="next" title="使用C# Interactive交互式运行C#代码示例">下一篇文章</a>
            </li>
        </ul></nav></aside></article><!--End of body content--><footer id="footer">
            Contents ©         <a href="https://vitamind3.gitee.io/">vitamind3</a> - Powered by         <a href="https://getnikola.com" rel="nofollow">Nikola</a>         
            
            
        </footer>
</div>
</div>


        <script src="../../assets/js/all-nocdn.js"></script><script>
    baguetteBox.run('div#content', {
        ignoreClass: 'islink',
        captions: function(element){var i=element.getElementsByTagName('img')[0];return i===undefined?'':i.alt;}});
    </script><script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?09027755f7478e129aec2cdd3acf9a4c";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>
</body>
</html>
